// Tests getCost()

#include "dominion.h"
#include "dominion_helpers.h"
#include <string.h>
#include <stdio.h>
#include <assert.h>
#include "rngs.h"

// set NOISY_TEST to 0 to remove printfs from output
#define NOISY_TEST 1

// set BOUNDARY_TEST to 0 to exclude boundary test cases.
#define BOUNDARY_TEST 0

int getCost(int cardNumber);

int main(int argc, char *argv[]) {
    int i;
    int seed = 1000;
    int numPlayer = 2;
    int maxBonus = 10;
    int p, r, handCount;
    int bonus;
    int k[10] = {adventurer, council_room, feast, gardens, mine
        , remodel, smithy, village, baron, great_hall};
    struct gameState G;
    int maxHandCount = 5;
    // arrays of all coppers, silvers, and golds
    int coppers[MAX_HAND];
    int silvers[MAX_HAND];
    int golds[MAX_HAND];
    for (i = 0; i < MAX_HAND; i++)
    {
        coppers[i] = copper;
        silvers[i] = silver;
        golds[i] = gold;
    }

    for (p = 0; p < numPlayer; p++) {
    printf ("TESTING getCost():\n");
        
#if (NOISY_TEST == 1)
    printf("Test player %d", p);
#endif
    memset(&G, 23, sizeof(struct gameState));   // clear the game state
    r = initializeGame(numPlayer, k, seed, &G); // initialize a new game
    G.handCount[p] = handCount;                 // set the number of cards on hand
    memcpy(G.hand[p], coppers, sizeof(int) * handCount); // set all the cards to copper
    updateCoins(p, &G, bonus);

        
// Test if curse costs 0
#if (NOISY_TEST == 1)
    printf("Curse cost = 0");
#endif
    assert(getCost(curse) == 0);

// Test if curse costs 2
#if (NOISY_TEST == 1)
    printf("Estate cost = 2");
#endif
    assert(getCost(estate) == 2);

// Test if curse costs 5
#if (NOISY_TEST == 1)
        printf("Duchy cost = 5");
#endif
        assert(getCost(duchy) == 5);
    
    }
    
    printf("All tests passed!\n");
    
    return 0;
}